package cn.tedu.springmvc2.controller;

import cn.tedu.springmvc2.pojo.entity.User;
import cn.tedu.springmvc2.pojo.mapper.UserMapper;
import cn.tedu.springmvc2.response.JsonResult;
import cn.tedu.springmvc2.response.StatusCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Api(tags = "01.用户管理模块")
@RestController
@RequestMapping("/v1/users/")
public class UserController {

    @ApiOperation(value = "登陆功能")
    @PostMapping("login")
   /* @RequestMapping("/login")
    @ResponseBody*/
    public JsonResult login(String username, String password){
        User user = userMapper.selectByUserName(username);
        /**
         * \\d  代表一个数字字符
         * 其中 \\ 是Java字符串中的转义字符
         * 表示正则表达式中的 \d
         * 在正则表达式中    \d 匹配任何数字，即0到9之间的任何单个数字
         * +  是一个量词，表示前面的模式元素（在这里是 \d）出现一次或多次。
         *
         * 整个正则表达式 \\d+ 匹配一个或多个连续的数字字符
         ···············································
         * matches() 是Java中 String 类的一个方法
         * 用于检查整个字符串是否匹配给定的正则表达式
         * 如果整个字符串都匹配给定的正则表达式，则返回 true   否则返回 false。
         *
         * 检查 username 是否仅由数字组成
         * 如果 username 仅由数字组成
         * matches() 方法将返回 true，否则返回 false
         * */
        if (username.matches("\\d+")) {
            throw new IllegalArgumentException("参数校验异常");
        }
/*        try {
            //事先去判断是否有值正确的传递进来
            if(username.isEmpty()){
                throw new NullPointerException("参数效验失败");
            }
        } catch (NullPointerException e) {
            return new JsonResult(StatusCode.VALIDATE_ERROR);//参数效验失败
        }*/

        if(user==null){
//            return  "用户名错误";
            return new JsonResult(StatusCode.USERNAME_ERROR);
        }
        if(user.getPassword().equals(password)){
//            return "登录成功";
            return new JsonResult(StatusCode.LOGIN_SUCCESS);
        }
//        return "密码错误";
           return new JsonResult(StatusCode.PASSWORD_ERROR);
        //return "登录成功,登录的用户名为:"+username+",登录的密码为:"+password;
    }

    @Autowired
    UserMapper userMapper;
    //调用注册方法，需要将想要注册的用户名传递进来
    @RequestMapping("/reg")
    public JsonResult reg(@RequestBody User user){
        //注册效验案例,注册前 先要判断用户名是否存在
        User byUserName = userMapper.selectByUserName(user.getUsername());
        /**
         * 判断查询出来的数据是否为空
         * 如不为空，通过传递进来的用户名能查到数据，则说明此用户名已存在
         */
        if(byUserName!=null){
            //如为空就不会满足上述if条件，就不会执行如return
//            return "用户名已存在,请更换用户名";
            return new JsonResult(StatusCode.USERNAME_ALREADY_EXISTS);
        }
        //不执行上述ruturn，则继续执行insert（注册）插入方法
        int rows=userMapper.insert(user);
        if(rows>0){
//            return "成功!";
            return JsonResult.ok();
        }else {
//            return "操作失败!";
            return new JsonResult(StatusCode.OPERATION_FAILED);
        }
    }


}
